// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] a = new int[n];
        for(int i = 0; i < n; i++){
            a[i] = in.nextInt();
        }
        int[][] f = new int[n+1][3];
        for(int i = 0; i < n; i++){
            f[i+1][0] = f[i][0] + a[i];
            f[i+1][1] = Math.max(f[i][1], f[i][0]) + (a[i] ^ 1);
            f[i+1][2] = Math.max(f[i][2], f[i][1]) + a[i];
        }
        System.out.println(Math.max(f[n][1],f[n][2]));
    }
}
//import java.util.*;
//public class Main{
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt(), m = in.nextInt();
//        List<int[]>[] g = new ArrayList[n];
//        Arrays.setAll(g, e->new ArrayList<>());
//        for(int i=0; i<m; i++){
//            int x = in.nextInt()-1, y = in.nextInt()-1;
//            g[x].add(new int[]{y, i});
//        }
//        from = new int[n][2];
//        int res = bfs(g, -1);
//        int[] ans = new int[m];
//        Arrays.fill(ans, res);
//        if(res != -1){
//            for(int v=n-1; v != 0; v = from[v][0]){
//                ans[from[v][1]] = bfs(g, from[v][1]);
//            }
//        }
//        for(int x : ans){
//            System.out.println(x);
//        }
//    }
//    static int[][] from;
//    static int bfs(List<int[]>[] g, int ban){
//        int n = g.length;
//        int[] dis = new int[n];
//        Arrays.fill(dis, -1);
//        dis[0] = 0;
//        Queue<Integer> que = new LinkedList<>();
//        que.add(0);
//        while(que.size() > 0){
//            int v = que.poll();
//            for(int[] y : g[v]){
//                int w = y[0];
//                if(y[1] != ban && dis[w] < 0) {
//                    dis[w] = dis[v] + 1;
//                    if (ban < 0) {
//                        from[w] = new int[]{v, y[1]};
//                    }
//                    que.add(w);
//                }
//            }
//        }
//        return dis[n-1];
//    }
//}
//import java.util.*;
//
//public class Main {
//    public static void main(String[] args) {
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt(), m = in.nextInt();
//        long[][] a = new long[n][3];
//        for (int i = 0; i < n; i++) {
//            a[i][0] = in.nextLong();
//            a[i][1] = in.nextLong();
//            a[i][2] = in.nextLong();
//        }
//        long ans = 0;
//        int[][] directions = {{1, 1, 1}, {1, 1, -1}, {1, -1, 1}, {1, -1, -1},
//                {-1, 1, 1}, {-1, 1, -1}, {-1, -1, 1}, {-1, -1, -1}};
//        for (int[] dir : directions) {
//            int i = dir[0], j = dir[1], k = dir[2];
//            Arrays.sort(a, (y, x) -> Long.compare(i * x[0] + j * x[1] + k * x[2], i * y[0] + j * y[1] + k *  y[2]));
//            long s1 = 0, s2 = 0, s3 = 0;
//            for (int x = 0; x < m; x++) {
//                s1 += a[x][0];
//                s2 += a[x][1];
//                s3 += a[x][2];
//            }
//            ans = Math.max(Math.abs(s1) + Math.abs(s2) + Math.abs(s3), ans);
//        }
//        System.out.println(ans);
//    }
//}
//import org.apache.ibatis.logging.stdout.StdOutImpl;
//import java.util.*;
//public class Main{
//    private static final int MOD = 998244353;
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt(), k = in.nextInt();
//        long[][] f = new long[n+1][n+1];
//        f[0][0] = 1;
//        for(int i=1; i<=n; i++){
//            for(int j=i/2; j>0; j--){
//                f[i][j] = (f[i-1][j-1] + f[i][2*j]) % MOD;
//            }
//        }
//        System.out.println(f[n][k]);
//    }
//}
//import java.util.*;
//public class Main{
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt();
//        int[][] a = new int[n][2];
//        for(int i=0; i<n; i++){
//            a[i][0] = in.nextInt();
//            a[i][1] = in.nextInt();
//        }
//        Arrays.sort(a, (x, y) -> x[0] - y[0]);
//        int l = 0, r = a[n-1][0] - a[0][0];
//        while(l <= r){
//            int mid = (l + r) / 2;
//            if(check(mid, a)){
//                l = mid + 1;
//            }else{
//                r = mid - 1;
//            }
//        }
//        System.out.println(l - 1);
//    }
//    static boolean check(int mid, int[][] a){
//        int max_y = 0, min_y = Integer.MAX_VALUE;
//        for(int l=0, r=0; r<a.length; r++){
//            while(l < r && a[r][0] - a[l][0] >= mid){
//                max_y = Math.max(max_y, a[l][1]);
//                min_y = Math.min(min_y, a[l][1]);
//                l++;
//            }
//            if(max_y != 0 && Math.abs(max_y - a[r][1]) >= mid || min_y != Integer.MAX_VALUE && Math.abs(min_y - a[r][1]) >= mid)
//                return true;
//        }
//        return false;
//    }
//}
//import java.util.*;
//public class Main{
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt(), k = in.nextInt(), d = in.nextInt();
//        int[] a = new int[n];
//        for(int i=0; i<n; i++){
//            a[i] = in.nextInt();
//        }
//        long[][][] f = new long[n+1][k+1][d];
//        for(long[][] x : f){
//            for(long[] y : x){
//                Arrays.fill(y, Long.MIN_VALUE);
//            }
//        }
//        for(int i=0; i<n; i++){
//            f[i][0][0] = 0;
//            for(int j=1; j<k+1; j++){
//                for(int m=0; m<d; m++){
//                    f[i+1][j][m] = Math.max(f[i][j][m], f[i][j-1][(m+a[i]%d)%d] + a[i]);
//                }
//            }
//        }
//        System.out.println(Math.max(f[n][k][0], -1));
//    }
//}
//public class Main{
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        String[] s = in.nextLine().split(" ");
//        char[] ch = s[0].toCharArray();
//        int k = Integer.parseInt(s[1]);
//        int n = ch.length;
//        memo = new long[n][17];
//        for(long[] r : memo) Arrays.fill(r, -1);
//        long res = dfs(0, 0, k, true, ch);
//        System.out.println(res);
//    }
//    private final static int mod = (int)1e9 + 7;
//    static long[][] memo;
//    static long dfs(int i, int j, int k, boolean isLimit, char[] s){
//        int bit = Integer.bitCount(j);
//        if(i == s.length) return bit == k ? 1 : 0;
//        if(!isLimit && memo[i][bit] != -1) return memo[i][bit];
//        int x = Character.isDigit(s[i]) ? s[i] - '0' : (s[i] - 'A') + 10;
//        int up = isLimit ? x : 15;
//        long res = 0;
//        for(int d = 0; d <= up; d++){
//            int t = j | 1 << d;
//            if(d == 0 && Integer.bitCount(t) == 1) t = 0;
//            if(Integer.bitCount(t) > k) continue;
//            res = (res + dfs(i+1, t, k, isLimit && d==up, s)) % mod;
//        }
//        if(!isLimit) memo[i][bit] = res;
//        return res;
//    }
//}
//f[1] = 1 = C11 * 2^1
//f[2] = f[1] + Cn2 * 2^2 = Cn1 + Cn2 * (C20+...+C22)
//f[3] = f[2] + = Cn1 + Cn2 * 2^2 + Cn3 * 2^3
//
//import java.util.*;
//public class Main{
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt();
//        long k = in.nextLong();
//        int[] cnt = new int[64];
//        for(int i = 0; i < n; i++){
//            long x = in.nextLong();
//            for(int j=0; j<64; j++){
//                cnt[j] += (int)(x >> j & 1);
//            }
//        }
//        memo = new long[64][2];
//        for(long[] r : memo)
//            Arrays.fill(r, -1L);
//        long ans = dfs(63, 0, true, cnt, k, n);
//        System.out.println(ans);
//    }
//    static long[][] memo;
//    static long dfs(int i, int j, boolean isLimit, int[] cnt, long k, int n){
//        if(i < 0) return 0;
//        if(!isLimit && memo[i][j] != -1) return memo[i][j];
//        long res = 0;
//        int up = isLimit ? (int)(k>>i)&1 : 1;
//        for(int d=0; d <= up; d++) {
//            long t = (d == 0 ? cnt[i] : n - cnt[i]) * (1L << i);
//            res = Math.max(res, dfs(i - 1, d, isLimit && d==up,cnt, k, n) + t);
//        }
//        if(!isLimit) memo[i][j] = res;
//        return res;
//    }
//}
//import java.util.*;
//public class Main {
//    static long ans = 0;
//    public static void main(String[] args) {
//        Scanner in = new Scanner(System.in);
//        int t = in.nextInt();
//        while (t-- > 0) {
//            int n = in.nextInt();
//            ans = 0;
//            TreeMap<Integer, List<Integer>> a = new TreeMap<>();
//            TreeMap<Integer, List<Integer>> b = new TreeMap<>();
//            for (int i = 0; i < n; i++) {
//                int k = in.nextInt(), l = in.nextInt(), r = in.nextInt();
//                if(l > r){
//                    ans += r;
//                    a.computeIfAbsent(k, e -> new ArrayList<>()).add(l-r);
//                }else{
//                    ans += l;
//                    b.computeIfAbsent(n-k, e -> new ArrayList<>()).add(r-l);
//                }
//            }
//            f(a);
//            f(b);
//            System.out.println(ans);
//        }
//    }
//    static void f(Map<Integer, List<Integer>> map){
//        PriorityQueue<Integer> que = new PriorityQueue<>();
//        for(int k : map.keySet()){
//            List<Integer> lst = map.get(k);
//            for(int d : lst){
//                ans += d;
//                que.offer(d);
//                if(que.size() > k){
//                    ans -= que.poll();
//                }
//            }
//        }
//    }
//}
//import java.util.*;
//public class Main{
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt() - 1, k = in.nextInt();
//        List<Integer>[] g = new ArrayList[n+1];
//        Arrays.setAll(g, e->new ArrayList<>());
//        for(int i=0; i<n; i++){
//            int x = in.nextInt()-1, y = in.nextInt()-1;
//            g[x].add(y);
//            g[y].add(x);
//        }
//        ans = k;
//        dfs(0, -1, g, 1, k);
//        System.out.println(ans);
//    }
//    static long ans;
//    static final int MOD = (int)1e9 + 7;
//    static void dfs(int x, int fa, List<Integer>[] g, int depth, int k){
//        int cnt = 0;
//        for(int y : g[x]){
//            if(y == fa) continue;
//            ans = ans * (k - (depth > 1 ? 2 : depth) - cnt) % MOD;
//            dfs(y, x, g, depth+1, k);
//            cnt++;
//        }
//    }
//}
//import java.util.*;
//public class Main{
//    static class Fenwick{
//        int[] tree;
//        int mod;
//        public Fenwick(int mod, int[] nums){
//            this.mod = mod;
//            int n = nums.length;
//            tree = new int[n<<2];
//            build(1, 0, n-1, nums);
//        }
//        void build(int i, int l, int r, int[] a){
//            if(l == r){
//                tree[i] = a[l] % mod;
//                return;
//            }
//            int mid = (l + r) / 2;
//            build(i<<1, l, mid, a);
//            build(i<<1|1, mid+1, r, a);
//            tree[i] = tree[i<<1] * tree[i<<1|1] % mod;
//        }
//        int query(int i, int l, int r, int L, int R){
//            if(L <= l && r <= R){
//                return tree[i];
//            }
//            int mid = (l + r) >>> 1;
//            if(L > mid){
//                return query(i<<1|1, mid+1, r, L, R);
//            }
//            if(R <= mid){
//                return query(i<<1, l, mid, L, R);
//            }
//            return query(i<<1, l, mid, L, R) * query(i<<1|1,mid+1, r, L, R) % mod;
//        }
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int t = in.nextInt();
//        while(t-- > 0){
//            int n = in.nextInt(), mod = in.nextInt();
//            int[] a = new int[n];
//            for(int i=0; i<n; i++){
//                a[i] = in.nextInt();
//            }
//            in.nextLine();
//            Fenwick tree = new Fenwick(mod, a);
//            char[] c = in.nextLine().toCharArray();
//            int l = 0, r = n-1;
//            for(char ch : c){
//                System.out.print(tree.query(1, 0, n-1, l, r) + " ");
//                if(ch == 'L') l++;
//                else r--;
//            }
//            System.out.println();
//        }
//    }
//}